import Cookies from 'js-cookie';
import {CACHE_KEY} from "/@/cache";

//解决同域名多系统问题
function buildKey(key: string) {
    // @ts-ignore
    return `${__NEXT_NAME__}:${key}`;
}

/**
 * 不建议直接使用这里的方法
 *
 * window.localStorage 浏览器永久缓存
 * @method set 设置永久缓存
 * @method get 获取永久缓存
 * @method remove 移除永久缓存
 * @method clear 移除全部永久缓存
 * @method has 判断是否存在某个永久缓存值
 */
export const Local = {
    // 设置永久缓存
    set<T>(key: string, val: T): void {
        window.localStorage.setItem(buildKey(key), JSON.stringify(val));
    },
    // 获取永久缓存
    get<T>(key: string): T | null {
        const json = window.localStorage.getItem(buildKey(key));
        return json ? JSON.parse(json) : null;
    },
    // 移除永久缓存
    remove(key: string): void {
        window.localStorage.removeItem(buildKey(key));
    },
    // 移除全部永久缓存
    clear(): void {
        window.localStorage.clear();
    },
    // 判断是否存在某个永久缓存值
    has(key: string): boolean {
        return window.localStorage.hasOwnProperty(buildKey(key));
    },
};

/**
 * 不建议直接使用这里的方法
 *
 * window.sessionStorage 浏览器临时缓存
 * @method set 设置临时缓存
 * @method get 获取临时缓存
 * @method remove 移除临时缓存
 * @method clear 移除全部临时缓存
 * @method has 判断是否存在某个临时缓存值
 */
export const Session = {
    // 设置临时缓存
    set<T>(key: string, val: T): void {
        if (key === CACHE_KEY.TOKEN_KEY) {
            Cookies.set(key, <string>val);
        } else {
            window.sessionStorage.setItem(buildKey(key), JSON.stringify(val));
        }
    },
    // 获取临时缓存
    get<T>(key: string): T | null {
        if (key === CACHE_KEY.TOKEN_KEY) {
            return Cookies.get(key) as unknown as T;
        } else {
            const json = window.sessionStorage.getItem(buildKey(key));
            return json ? JSON.parse(json) : null;
        }
    },
    // 移除临时缓存
    remove(key: string): void {
        if (key === CACHE_KEY.TOKEN_KEY) {
            Cookies.remove(key);
        } else {
            window.sessionStorage.removeItem(buildKey(key));
        }
    },
    // 移除全部临时缓存
    clear(): void {
        Cookies.remove(CACHE_KEY.TOKEN_KEY);
        window.sessionStorage.clear();
    },
    // 判断是否存在某个临时缓存值
    has(key: string): boolean {
        return (key === CACHE_KEY.TOKEN_KEY ? Cookies.get(key) : window.sessionStorage.hasOwnProperty(buildKey(key))) !== undefined;
    },
};
